package good_src.Implementation;

import good_src.Interfaces.MethodRequest;
import good_src.Interfaces.Subject;
import good_src.Strategy.Atomique;

/**
 * 
 * @author Tangi Midy & Fabien Le Peih Implementation of the MethodRequest
 *         Interface
 *         <p>
 *         The Get Method is used to return the capteur's current value
 *         </p>
 */
public class ConcreteMethodRequestGet implements MethodRequest {

	private Subject<Integer> capteur;

	public Object getParameters() {
		return null;
	}

	/**
	 * 
	 * @see good_src.Interfaces.MethodRequest#call()
	 */
	@Override
	public Object call() {

		if (capteur.getStrategy() != null
				&& capteur.getStrategy().getClass().getSimpleName().equals(
						"Atomique")) {
			return ((Atomique) capteur.getStrategy()).getValue();
		} else {
			return capteur.getValue();
		}
	}

	/**
	 * 
	 * @see good_src.Interfaces.MethodRequest#guard()
	 */
	@Override
	public boolean guard() {
		return false;
	}

	/**
	 * Set the referenced capteur
	 * @param capteur the referenced capteur
	 */
	public void setCapteur(Subject<Integer> capteur) {
		this.capteur = capteur;
	}

	/**
	 * <p>Used for tests</p>
	 * @return the referenced capteur
	 */
	public Subject<Integer> getCapteur() {
		return capteur;
	}

}
